package q1.project.common.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/**
 * 全局跨域配置 统一处理跨域请求，避免在每个Controller中单独配置
 *
 * @author Q1 Team
 * @version 1.0
 */
@Configuration
public class CorsConfig {

  /**
   * 配置跨域过滤器
   *
   * @return CorsFilter
   */
  @Bean
  public CorsFilter corsFilter() {
    CorsConfiguration config = new CorsConfiguration();

    // 允许所有源访问（生产环境应该配置具体的域名）
    config.addAllowedOriginPattern("*");

    // 允许所有请求头
    config.addAllowedHeader("*");

    // 允许所有请求方法（GET, POST, PUT, DELETE等）
    config.addAllowedMethod("*");

    // 允许发送Cookie
    config.setAllowCredentials(true);

    // 预检请求的有效期，单位为秒（2小时）
    config.setMaxAge(7200L);

    // 允许浏览器访问的响应头
    config.addExposedHeader("Authorization");
    config.addExposedHeader("Content-Disposition");
    config.addExposedHeader("satoken");

    // 配置路径映射
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", config);

    return new CorsFilter(source);
  }
}
